let mongoose = require("mongoose");

mongoose
  .connect("mongodb://127.0.0.1/test-blog")
  .then((res) => {
    console.log("链接成功");
  })
  .catch((err) => {
    console.log("链接失败");
  });

let Schema = mongoose.Schema;

// 1-定义了文章表的结构
let ArticleSchema = new Schema(
  {
    title: String,
    content: String,
    // 文章表 作者id --ref: "User"关联了 用户表中id
    author: { type: Schema.Types.ObjectId, ref: "User" },
    tag: String,
    views: {
      type: Number,
      default: 0,
    },
  },
  {
    timestamps: true,
  }
);
// 2-创建数据模型--根据表结构创建数据模型---》并且把表结构映射数据中一个表 Articles
//Article 通过这个对象我们就可以数据库中的数据进行增删改查CRUD
ArticleSchema.virtual("coms", {
  ref: "Comment",
  localField: "_id",
  foreignField: "article_id",
  justOne: false, //取Array值- 会把文章对应的评论全部提取出来
  // count: true, //取总数  如果为true 只显示数组的长度，不显示数组的内容
});
// 下面这两句只有加上了， 虚拟字段才可以显性的看到，不然只能隐性使用
ArticleSchema.set("toObject", { virtuals: true });
ArticleSchema.set("toJSON", { virtuals: true });

let Article = mongoose.model("Article", ArticleSchema);

/* 
定义的用户表
*/
let UserSchema = new Schema(
  {
    username: {
      type: String,
      // 如果数据库已经有了重复的数据，再次修改了结构--清空数据库的数据， 断开数据库连接-
      unique: true,
      required: true,
    },
    password: String,
    nickname: String,
    headImgUrl: String,
  },
  {
    timestamps: true,
  }
);
let User = mongoose.model("User", UserSchema);

let CommentSchema = new Schema(
  {
    content: String,
    article_id: { type: Schema.Types.ObjectId, ref: "Article" },
    reply_user_id: { type: Schema.Types.ObjectId, ref: "User" },
  },
  { timestamps: true }
);
let Comment = mongoose.model("Comment", CommentSchema);

module.exports = { Comment, User, Article };